/*
-----------------------------------------------------------------------------
Filename:    ActorEntitySceneNode.h
-----------------------------------------------------------------------------

*/
#ifndef __ActorEntitySceneNode_h_
#define __ActorEntitySceneNode_h_

#include <OgreRoot.h>
#include "NxOgre.h"
#include "WorldEnums.h"
#include "critter.h"



class ActorEntitySceneNode : public NxOgre::Callback
{

public: 

	enum eActorType {
						Normal_Actor,
						Emitter_Holder
					};

public:

	ActorEntitySceneNode(WorldEnums::eSceneryObjects sceneryId, Ogre::String mName, NxOgre::SceneGeometry *mActor, Ogre::SceneNode* mSceneNode, Ogre::Entity* mEntity);
    ActorEntitySceneNode(WorldEnums::eSceneryObjects sceneryId, eActorType mActorType, Ogre::String mName, NxOgre::SceneGeometry *mActor, Ogre::SceneNode* mSceneNode, Ogre::Entity* mEntity);
    ~ActorEntitySceneNode(void);

	void setName(Ogre::String name);
	Ogre::String getName(void);
	WorldEnums::eSceneryObjects getSceneryId(void);
    NxOgre::SceneGeometry *getActor(void);
	Ogre::SceneNode* getSceneNode(void);
	Ogre::Entity* getEntity(void);
	eActorType getActorType(void);

	bool isPhisical;

private:

	void onVolumeEvent(NxOgre::Volume* volume, NxOgre::Shape* volumeShape, NxOgre::RigidBody* collision_body, NxOgre::Shape* rigidBodyShape, unsigned int collisionEvent);
	void onContact(const NxOgre::ContactPair& pair);

private:

	WorldEnums::eSceneryObjects mSceneryId;
	eActorType mActorType;
	Ogre::String mName;
	NxOgre::SceneGeometry *mActor;
	Ogre::SceneNode* mSceneNode;
	Ogre::Entity* mEntity;
};

#endif // #ifndef __ActorEntitySceneNode_h_